home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
filesyst
/
ext
/
extfs.p6
/
extfs
Wrap
Text File
|
1996-11-17
|
5KB
|
151 lines
*** linux-0.98.5/fs/ext/dir.c Tue Nov 10 12:54:53 1992
--- linux/fs/ext/dir.c Sun Nov 15 20:06:26 1992
***************
*** 69,74 ****
--- 69,76 ----
if (!inode || !S_ISDIR(inode->i_mode))
return -EBADF;
+ if (filp->f_pos % 8 != 0)
+ return -EBADF;
while (filp->f_pos < inode->i_size) {
offset = filp->f_pos & 1023;
bh = ext_bread(inode,(filp->f_pos)>>BLOCK_SIZE_BITS,0);
***************
*** 78,92 ****
}
de = (struct ext_dir_entry *) (offset + bh->b_data);
while (offset < 1024 && filp->f_pos < inode->i_size) {
! offset += de->rec_len;
! filp->f_pos += de->rec_len;
! if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
! de->rec_len < de->name_len + 8) {
! printk ("ext_readdir: bad directory entry\n");
printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
inode->i_dev, inode->i_ino, offset, de->rec_len, de->name_len);
! return 0;
}
if (de->inode) {
for (i = 0; i < de->name_len; i++)
if (c = de->name[i])
--- 80,98 ----
}
de = (struct ext_dir_entry *) (offset + bh->b_data);
while (offset < 1024 && filp->f_pos < inode->i_size) {
! if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
! de->rec_len < de->name_len + 8 ||
! (de->rec_len + filp->f_pos - 1) / 1024 > (filp->f_pos / 1024)) {
! printk ("ext_readdir: bad dir entry, skipping\n");
printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
inode->i_dev, inode->i_ino, offset, de->rec_len, de->name_len);
! filp->f_pos += 1024-offset;
! if (filp->f_pos > inode->i_size)
! filp->f_pos = inode->i_size;
! continue;
}
+ offset += de->rec_len;
+ filp->f_pos += de->rec_len;
if (de->inode) {
for (i = 0; i < de->name_len; i++)
if (c = de->name[i])
*** linux-0.98.5/fs/ext/namei.c Tue Nov 10 12:54:53 1992
--- linux/fs/ext/namei.c Sun Nov 15 20:05:31 1992
***************
*** 122,139 ****
if (prev_dir)
*prev_dir = NULL;
}
! if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
! de->rec_len < de->name_len + 8) {
printk ("ext_find_entry: bad dir entry\n");
printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
! brelse (bh);
! return NULL;
}
if (ext_match(namelen,name,de)) {
*res_dir = de;
if (next_dir)
! if (offset + de->rec_len < dir->i_size)
*next_dir = (struct ext_dir_entry *)
((char *) de + de->rec_len);
else
--- 122,144 ----
if (prev_dir)
*prev_dir = NULL;
}
! if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
! de->rec_len < de->name_len + 8 ||
! (((char *) de) + de->rec_len-1 >= BLOCK_SIZE+bh->b_data)) {
printk ("ext_find_entry: bad dir entry\n");
printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
! de = (struct ext_dir_entry *) (bh->b_data+BLOCK_SIZE);
! offset = ((offset / BLOCK_SIZE) + 1) * BLOCK_SIZE;
! continue;
! /* brelse (bh);
! return NULL; */
}
if (ext_match(namelen,name,de)) {
*res_dir = de;
if (next_dir)
! if (offset + de->rec_len < dir->i_size &&
! ((char *)de) + de->rec_len < BLOCK_SIZE+bh->b_data)
*next_dir = (struct ext_dir_entry *)
((char *) de + de->rec_len);
else
***************
*** 221,227 ****
#endif
brelse(bh);
bh = NULL;
! bh = ext_bread(dir,offset>>BLOCK_SIZE_BITS,1);
if (!bh)
return NULL;
de = (struct ext_dir_entry *) bh->b_data;
--- 226,232 ----
#endif
brelse(bh);
bh = NULL;
! bh = ext_bread(dir,offset>>BLOCK_SIZE_BITS,0);
if (!bh)
return NULL;
de = (struct ext_dir_entry *) bh->b_data;
***************
*** 228,235 ****
}
if (offset >= dir->i_size) {
/* Check that the directory entry fits in the block */
! if (offset % BLOCK_SIZE == 0
! || (BLOCK_SIZE - (offset % BLOCK_SIZE)) < rec_len) {
if ((offset % BLOCK_SIZE) != 0) {
/* If the entry does not fit in the
block, the remainder of the block
--- 233,240 ----
}
if (offset >= dir->i_size) {
/* Check that the directory entry fits in the block */
! if (offset % BLOCK_SIZE == 0 ||
! (BLOCK_SIZE - (offset % BLOCK_SIZE)) < rec_len) {
if ((offset % BLOCK_SIZE) != 0) {
/* If the entry does not fit in the
block, the remainder of the block
***************
*** 262,268 ****
dir->i_ctime = CURRENT_TIME;
}
if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
! de->rec_len < de->name_len + 8) {
printk ("ext_addr_entry: bad dir entry\n");
printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
--- 267,274 ----
dir->i_ctime = CURRENT_TIME;
}
if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
! de->rec_len < de->name_len + 8 ||
! (((char *) de) + de->rec_len-1 >= BLOCK_SIZE+bh->b_data)) {
printk ("ext_addr_entry: bad dir entry\n");
printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);